package org.jeecg.modules.zhoupackage.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.degression.pojo.MlccDataType;
import org.jeecg.modules.degression.pojo.MlccPriceSystemCostRecord;
import org.jeecg.modules.gwcjava.jiekou.entity.MlccUserInfo;
import org.jeecg.modules.zhoupackage.pojo.*;

import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;

/**
 * 纽扣
 *
 * @author zxl
 * @since 20200925
 */
@SuppressWarnings("all")
public interface IMySingleOrderService {
    /**
     * 获取纽扣查询条件
     *
     * @param mouldId
     */
    List<MlccCategoryInfo> getButtonSelect(int mouldId);

    /**
     * 获取具体的纽扣列表
     *
     * @param buttonTypeId
     */
    List<MlccButtonsInfo> getButtons(Integer buttonTypeId);

    /**
     * 获取当前用户个顶订单
     *
     * @param token
     * @param time
     * @param status
     * @param code
     */
    List<MlccSingleOrderInfo> getSingleOrderList(String token, Date time, Integer status, String code);

    /**
     * 获取个订订单详情
     *
     * @param token
     * @param orderSn
     */
    MlccSingleOrderInfo getDingleOrderDetail(String token, String orderSn);

    /**
     * 个订订单返修
     *
     * @param entity
     */
    int addSingleOrderRepair(String token, MlccRepairOrderInfo entity);

    /**
     * 个订面料与辅料界面获取面料信息
     *
     * @param token
     * @param typeId
     * @param fabeicCode
     */
    List<MlccFabricInfo> getSingleFabricList(String token, Integer typeId, String fabeicCode);

    /**
     * 未支付个定订单详情
     *
     * @param token
     * @param orderSn
     */
    MlccSingleOrderInfo getSingleDetail(String token, String orderSn);

    /**
     * 获取未支付订单详情页面的品牌表
     *
     * @param token
     * @return
     */
    List<String> getTitle(String token);

    /**
     * 提交订单
     *
     * @param token        令牌
     * @param orderID      订单ID
     * @param remark       备注
     * @param shiyang      式样
     * @param modifiedYang 改款打样
     * @param emergency    紧急状况
     * @param brandLabel   品牌标
     * @param orderMoney   订单金额
     */
    int submitOrder(String token, int orderID, String remark, String shiyang, String modifiedYang, String emergency, String orderMoney, String brandLabel);

    /**
     * 根据绣字类型查询绣字高度
     *
     * @param xiuzitype
     * @return
     */
    List<MlccEmbdtypePrice> getXiuziList(String xiuzitype);

    /**
     * 查询绣字位置集合
     *
     * @param categoryID 类别ID
     */
    List<MlccCategoryLocaltion> listXiuziHandler(String categoryID);

    /**
     * 个订界面获取类别和工艺数据
     *
     * @param mouldid
     * @param typeids
     * @return
     */
    List<MlccModuleSmallTemplate> getTypeAndProcess(String token, String mouldid, String typeids);

    /**
     * 获取驳宽和珠边宽度
     *
     * @param token
     * @param mouldid
     */
    List<MlccModuleSmallTemplate> getBokuan(String token, int mouldid);

    /**
     * 个订模板获取详情
     *
     * @param token   令牌
     * @param orderSn 个订订单编号
     * @return org.jeecg.modules.zhoupackage.pojo.MlccSignModuleInfo
     */
    MlccSignModuleInfo getmoduleDetail(String token, String orderSn);

    /**
     * 继续填写个订订单
     *
     * @param token   令牌
     * @param orderSn 个订订单编号
     */
    MlccSingleOrderInfo continueSingleOrder(String token, String orderSn);

    /**
     * 用户详情
     *
     * @param token 令牌
     */
    MlccUserInfo getUserDetail(String token);

    /**
     * 个定预览订单显示加价服务
     *
     * @param orderSn 订单编号
     */
    JSONObject listJiajia(String orderSn);

    /**
     * 计算订单价格
     *
     * @param orderPrice   除了加价之外的订单金额
     * @param shiyang      式样（加价服务）
     * @param modifiedYang 改款打样（加价服务）
     * @param emergency    紧急指数（加价服务）
     */
    String compudePrice(Double orderPrice, String shiyang, String modifiedYang, String emergency);

    /**
     * 获取面料列表
     *
     * @param page       分页器
     * @param fabricCode 面料编码
     */
    IPage<MlccFabricInfo> getFabricListnew(Page<MlccFabricInfo> page, String fabricCode, Integer type);

    /**
     * 保存或更新附加条件
     *
     * @param productid 产品id
     * @param priceid   成本价格ID
     * @param type      上级id
     */
    int saveFujia(String productid, String priceid, String type);

    /**
     * 真·计算个订订单价格
     *
     * @param price   还没有加上附加条件的金额
     * @param orderSn 订单编号
     */
    double getallPrice(double price, String orderSn);

    /**
     * 获取个订定单的收费服务项（里布、低领尼、纽扣）
     *
     * @param orderSn 个订订单编号
     */
    JSONObject shouFeifuwuXiang(String orderSn);

    /**
     * 获取个订下的产品列表
     *
     * @param orderSn 订单编号
     */
    List<MlccProductInfo> productList(String orderSn);

    /**
     * 获取个订下的产品列表(用于个订产品发货)
     *
     * @param orderSn 订单编号
     */
    List<MlccProductInfo> productListfa(String orderSn);

    /**
     * 个订查询附加条件列表
     *
     * @param orderSn 个订订单编号
     */
    List<MlccPriceSystemCostRecord> listFujia(String orderSn);

    /**
     * 个订产品查询附加条件列表————用于个订加工厂展示
     *
     * @param productid 产品id
     */
    List<MlccPriceSystemCostRecord> listFujiaByProduct(String productid);

    /**
     * 个订订单导出产品
     *
     * @param orderSn  订单编号
     * @param response 响应对象
     */
    void dingleExcel(String orderSn, HttpServletResponse response) throws Exception;

    /**
     * 新·个订产品状态更新，获取产品状态
     *
     * @param proid 产品id
     */
    List<MlccDataType> listProductStatus(String proid);
}
